package com.github.wxiaoqi.security.common.util;


import java.text.ParseException;
import java.util.Date;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;



public class ValidateSign {
	private final static Logger logger = LoggerFactory.getLogger(ValidateSign.class);
    /**
     * @param sign 请求中的签名，key 请求中生产签名用的盐值， parammap 生产签名要用的参数串
     * @return
     */
    public static boolean checkSign(String sign,String key,Map<String, Object> parammap) {
    	if(null==parammap.get("reqDatetime")){
    		logger.info("请求签名参数不合法：时间戳不能为空");
    		return false;
    	}
    	try {
			Map<String,Long>timeDif=DateUtils.timeDifference(new Date(),DateUtils.parseDate((String)parammap.get("reqDatetime"), DateUtils.DEFAULT_DATETIME_FORMAT_SEC));
			if(timeDif.get("minute")>15){
				logger.info("请求签名参数不合法：时间戳不合法");
				return false;
			}
    	} catch (ParseException e) {
			logger.info("请求签名参数不合法：时间戳格式不正确"+e.getMessage());
			e.printStackTrace();
			return false;
		}
    	String str = FilterUtil.createLinkString(parammap);
    	logger.info("参与签名字符串：--"+str);
    	return MD5.verify(str, sign, key, "UTF-8");
    }
    
}
